// 测试模块
package api

import (
	"yingsheng.com/go-api-server"
	"yingsheng.com/go-api-server/example/bll"
)

type Test struct {
	apiserver.Controller
}

func init() {
	apiserver.Wait()
	apiserver.AddController("test", &Test{})
}

func (t *Test) FuncMapping() {
	t.GetMapping("Test", t.Test)
	t.PostMapping("Add", t.Add)
	t.PostMapping("Update", t.Update)
	t.PostMapping("Delete", t.Delete)
	t.GetMapping("Get", t.Get)
	t.GetMapping("List", t.List)
}

func (t *Test) Test() {
	err := bll.Test.PublishMessage()

	t.Error("this is a testing: ", err)
}

func (t *Test) Add() {
	userId, err := t.GetInt64("userId")
	if err != nil {
		t.Error("userid不能为空，并且必须是数字")
		return
	}

	userName := t.GetString("userName")
	if len(userName) == 0 {
		t.Error("userName不能为空")
		return
	}

	md, err := bll.Test.Add(userId, userName)
	if err != nil {
		t.Error(err)
	} else {
		t.Put("test", md)
	}
}

func (t *Test) Update() {
	userId, err := t.GetInt64("userId")
	if err != nil {
		t.Error("userid不能为空，并且必须是数字")
		return
	}

	userName := t.GetString("userName")
	if len(userName) == 0 {
		t.Error("userName不能为空")
		return
	}
	//如果需要判断参数是否存在，用下面的形式
	//userName, has := t.GetParam("userName")

	err = bll.Test.Update(userId, userName)
	if err != nil {
		t.Error(err)
	}
}

func (t *Test) Delete() {
	userName := t.GetString("userName")
	if len(userName) == 0 {
		t.Error("userName不能为空")
		return
	}

	err := bll.Test.Delete(userName)
	if err != nil {
		t.Error(err)
	}
}

func (t *Test) Get() {
	id, err := t.GetInt64("id")
	if err != nil {
		t.Error("id不能为空并且必须是数字")
		return
	}

	md, err := bll.Test.Get(id)
	if err != nil {
		t.Error(err)
	} else {
		t.Put("sso", md)
	}
}

func (t *Test) List() {
	var err error
	var index, size int

	index, err = t.GetInt("pageIndex", 1)
	if err != nil {
		index = 1
	}
	size, err = t.GetInt("pageSize", 10)
	if err != nil {
		size = 10
	}

	startTime := "2016-01-01 00:00:00"
	endTime := "2016-12-31 23:59:59"

	ml, err2 := bll.Test.ListByCreateTime(index, size, startTime, endTime)
	if err2 != nil {
		t.Error(err2)
	} else {
		t.Put("list", ml)
	}
}

func (t *Test) Prepare() {
	//t.Error("我主动停止")
	//t.Stop()
}
